package kuonta.web.forms;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.faces.event.ActionEvent;

import kuonta.domain.ItemRecibo;
import kuonta.domain.Recibo;
import kuonta.domain.TipoItemRecibo;
import kuonta.domain.FluxoRecibo;

import org.cerberus.core.application.ApplicationException;
import org.cerberus.core.persistence.orm.Dao;
import org.cerberus.web.jsf.FacesUtil;
import org.cerberus.web.jsf.ManagedBean;
import org.cerberus.web.jsf.annotations.MB;
import org.cerberus.web.jsf.parser.ParseLong;

@SuppressWarnings("unchecked")
@MB(bean = Recibo.class, parser=ParseLong.class)
public class FormRecibo extends ManagedBean<Recibo, Long> implements Serializable{

	private static final long serialVersionUID = -8181637923741436748L;
	
	private Dao<Recibo, Integer> daoRecibo = (Dao)FacesUtil.getBean("basicosDao");

	@SuppressWarnings("unused")
	private List<FluxoRecibo> tiposRecibos;
	
	private List<TipoItemRecibo> tipoItens;
	
	public FormRecibo() {		
		this.getBean().getItens().add(new ItemRecibo());
		this.getBean().getItens().add(new ItemRecibo());
		this.getBean().getItens().add(new ItemRecibo());
		this.getBean().getItens().add(new ItemRecibo());
		this.getBean().getItens().add(new ItemRecibo());
	}

	public List<TipoItemRecibo> getTipoItens() {
		return tipoItens;
	}

	public void setTipoItens(List<TipoItemRecibo> tipoItens) {
		this.tipoItens = tipoItens;
	}

	public void setTiposRecibos(List<FluxoRecibo> tiposRecibos) {
		this.tiposRecibos = tiposRecibos;
	}

	public List<FluxoRecibo> getTiposRecibos() {
		FluxoRecibo[] tipos = FluxoRecibo.values();
		return Arrays.asList(tipos);
	}

	@Override
	public void save(ActionEvent e) {

		List<ItemRecibo> itens = new ArrayList<ItemRecibo>();
		List<ItemRecibo> itensForm = getBean().getItens();

		for (ItemRecibo item : getBean().getItens()) {
			if (item.getValor()!=null) {
				item.setRecibo(getBean());
				item.setData(getBean().getData());
				itens.add(item);
			}
		}

		getBean().setItens(itens);

		try {
			if (getBean().getItens().size() >= 1) {
				getFacade().save(getBean());
			}
		} catch (ApplicationException ae) {
			getBean().setItens(itensForm);
			FacesUtil.addErroMessage(ae.getMessage());
			return;
		}

		FacesUtil.addMessage("O Recibo foi salvo com sucesso.");
		setBean(new Recibo());
		this.getBean().getItens().add(new ItemRecibo());
		this.getBean().getItens().add(new ItemRecibo());
		this.getBean().getItens().add(new ItemRecibo());
		this.getBean().getItens().add(new ItemRecibo());
		this.getBean().getItens().add(new ItemRecibo());
	}

	@Override
	public List<Recibo> getList() {
		return daoRecibo.listByNamedQuery("listaRecibosOrderData");
	}
	
	@Override
	public void edit(ActionEvent e) {		
		super.edit(e);
		this.getBean().getItens().add(new ItemRecibo());
		this.getBean().getItens().add(new ItemRecibo());
		this.getBean().getItens().add(new ItemRecibo());
		this.getBean().getItens().add(new ItemRecibo());
		this.getBean().getItens().add(new ItemRecibo());
	}

}
